/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package view;

import model.Cliente;
import Excecoes.CEExcepiton;
import IRepositorios.IRepositorioCliente;
import control.Locadora;
import control.dao.metodosClientes;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.imageio.ImageIO;
import javax.swing.JOptionPane;
import javax.swing.JTable;
import javax.swing.ListSelectionModel;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import javax.swing.table.DefaultTableModel;

/**
 *
 * @author Andre
 */
public class FormCliente extends javax.swing.JFrame {

    static int decisao = 0;//se for 0 cadastra, se for 1 edita
    private Locadora loc;
    private IRepositorioCliente IRCliente;
    DefaultTableModel tmCliente = new DefaultTableModel(null, new String[]{"Nome", "CPF", "Endereço"});
    private List<Cliente> listCliente;
    ListSelectionModel lsmCliente;

    public FormCliente() {
        initComponents();
        BufferedImage image = null;
        File imageFile = new File(".\\src\\Imagens\\logo.png");
        try {
            image = ImageIO.read(imageFile);

        } catch (IOException ex) {
        }
        this.setIconImage(image);
        InsereTexto();
        IRCliente = new metodosClientes();
        loc = new Locadora(null, IRCliente, null, null, null);
        listCliente = loc.buscarAllClienteList();
        mostraPesquisa(listCliente);
    }

    /**
     * This method is called from within the constructor to initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is always
     * regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        jB_salvar = new javax.swing.JButton();
        jB_excluir = new javax.swing.JButton();
        jB_novo = new javax.swing.JButton();
        jLabel3 = new javax.swing.JLabel();
        jTF_nome = new javax.swing.JTextField();
        jTF_cpf = new javax.swing.JTextField();
        jLabel5 = new javax.swing.JLabel();
        jLabel9 = new javax.swing.JLabel();
        jTF_endereco = new javax.swing.JTextField();
        jTF_pesquisar = new javax.swing.JTextField();
        jLabel16 = new javax.swing.JLabel();
        jB_voltar = new javax.swing.JButton();
        jLabel2 = new javax.swing.JLabel();
        jScrollPane2 = new javax.swing.JScrollPane();
        jTabela_Cliente = new javax.swing.JTable();

        setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
        setTitle("Cliente");
        getContentPane().setLayout(null);

        jB_salvar.setFont(new java.awt.Font("Tahoma", 0, 14)); // NOI18N
        jB_salvar.setText("Salvar");
        jB_salvar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jB_salvarActionPerformed(evt);
            }
        });
        getContentPane().add(jB_salvar);
        jB_salvar.setBounds(160, 330, 110, 40);

        jB_excluir.setFont(new java.awt.Font("Tahoma", 0, 14)); // NOI18N
        jB_excluir.setText("Excluir");
        jB_excluir.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jB_excluirActionPerformed(evt);
            }
        });
        getContentPane().add(jB_excluir);
        jB_excluir.setBounds(300, 330, 110, 40);

        jB_novo.setFont(new java.awt.Font("Tahoma", 0, 14)); // NOI18N
        jB_novo.setText("Novo");
        jB_novo.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jB_novoActionPerformed(evt);
            }
        });
        getContentPane().add(jB_novo);
        jB_novo.setBounds(20, 330, 110, 40);

        jLabel3.setText("CPF:");
        getContentPane().add(jLabel3);
        jLabel3.setBounds(310, 220, 30, 20);

        jTF_nome.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                jTF_nomeMouseClicked(evt);
            }
        });
        getContentPane().add(jTF_nome);
        jTF_nome.setBounds(80, 220, 220, 20);

        jTF_cpf.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                jTF_cpfMouseClicked(evt);
            }
        });
        getContentPane().add(jTF_cpf);
        jTF_cpf.setBounds(340, 220, 150, 20);

        jLabel5.setText("Endereço:");
        getContentPane().add(jLabel5);
        jLabel5.setBounds(40, 270, 50, 20);

        jLabel9.setText("Nome:");
        getContentPane().add(jLabel9);
        jLabel9.setBounds(40, 220, 34, 20);

        jTF_endereco.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                jTF_enderecoMouseClicked(evt);
            }
        });
        getContentPane().add(jTF_endereco);
        jTF_endereco.setBounds(100, 270, 390, 20);

        jTF_pesquisar.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                jTF_pesquisarMouseClicked(evt);
            }
        });
        jTF_pesquisar.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyReleased(java.awt.event.KeyEvent evt) {
                jTF_pesquisarKeyReleased(evt);
            }
        });
        getContentPane().add(jTF_pesquisar);
        jTF_pesquisar.setBounds(190, 20, 230, 20);

        jLabel16.setText("Pesquisar");
        getContentPane().add(jLabel16);
        jLabel16.setBounds(130, 20, 60, 20);

        jB_voltar.setFont(new java.awt.Font("Tahoma", 0, 14)); // NOI18N
        jB_voltar.setText("Voltar");
        jB_voltar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jB_voltarActionPerformed(evt);
            }
        });
        getContentPane().add(jB_voltar);
        jB_voltar.setBounds(440, 330, 110, 40);

        jLabel2.setBorder(javax.swing.BorderFactory.createTitledBorder(new javax.swing.border.LineBorder(new java.awt.Color(0, 0, 0), 1, true), "Dados Gerais"));
        getContentPane().add(jLabel2);
        jLabel2.setBounds(10, 190, 550, 120);

        jTabela_Cliente.setModel(tmCliente);
        jTabela_Cliente.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
        lsmCliente = jTabela_Cliente.getSelectionModel();
        lsmCliente.addListSelectionListener(new ListSelectionListener(){
            public void valueChanged(ListSelectionEvent e){
                if(! e.getValueIsAdjusting()){
                    JTTabelaLinhaSelecionada(jTabela_Cliente);
                }
            }
        }
    );
    jScrollPane2.setViewportView(jTabela_Cliente);

    getContentPane().add(jScrollPane2);
    jScrollPane2.setBounds(10, 50, 550, 120);

    java.awt.Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
    setBounds((screenSize.width-591)/2, (screenSize.height-432)/2, 591, 432);
    }// </editor-fold>//GEN-END:initComponents

    private void jB_salvarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jB_salvarActionPerformed
        //verificar se todos os campos foram preenchidos
        if (VerificaDados()) {

            Cliente cliente = new Cliente(Long.parseLong(jTF_cpf.getText()));
            cliente.setNome(jTF_nome.getText());
            cliente.setEndereco(jTF_endereco.getText());

            //cadastrar
            if (decisao == 0) {
                //verificar se cliente ja existe
                if (loc.buscarCliente(cliente.getCpf()) == null) {

                    loc.cadastrarCliente(cliente);
                    InsereTexto();
                    DesabilitarDados();
                    jTF_pesquisarKeyReleased(null);
                    JOptionPane.showMessageDialog(null, "Cadastrado com sucesso.");
                } else {
                    JOptionPane.showMessageDialog(null, "Cliente ja cadastrado.");
                }
            } else {
                //editar
                loc.atualizarCadastroCliente(cliente);
                jTabela_Cliente.clearSelection();
                jTF_pesquisarKeyReleased(null);
                InsereTexto();
                DesabilitarDados();
                JOptionPane.showMessageDialog(null, "Editado com sucesso.");
            }


        } else {
            JOptionPane.showMessageDialog(null, "Campos não preenchidos.");
        }

    }//GEN-LAST:event_jB_salvarActionPerformed

    private void jB_excluirActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jB_excluirActionPerformed
        if (jTabela_Cliente.getSelectedRow() != -1) {
            int resp = JOptionPane.showConfirmDialog(this, "Deseja realmente excluir este cliente?", "Confirmação", JOptionPane.YES_NO_OPTION);

            if (resp == JOptionPane.YES_NO_OPTION) {
                loc.removerCliente(Long.parseLong(jTF_cpf.getText()));
                jTabela_Cliente.clearSelection();
                jTF_pesquisarKeyReleased(null);

                limpaDados();
                DesabilitarDados();
            }

        } else {
            JOptionPane.showMessageDialog(null, "Nada selecionado");
        }

        //        emf= Persistence.createEntityManagerFactory("PinheiroPecas"); 
//        cli_dao= new ClienteJpaController(emf);
//         if(jTable_cliente.getSelectedRow()!=-1){ 
//            int resp = JOptionPane.showConfirmDialog(this, "Deseja realmente excluir este cliente?",
//                "Confirmação", JOptionPane.YES_NO_OPTION);
//
//        if (resp == JOptionPane.YES_NO_OPTION) {
//        try {
//            cli_dao.destroy(cliente_static.getIdCli());
//            end_dao.destroy(cliente_static.getIdCliEnd().getIdEnd());
//        } catch (NonexistentEntityException ex) {
//            Logger.getLogger(FormProdutos.class.getName()).log(Level.SEVERE, null, ex);
//        }
//        JOptionPane.showMessageDialog(null, "Cliente excluído com sucesso.");
//        }
//         }else{
//             //JOptionPane.showMessageDialog(null, "Nada selecionado");
//         }
//         Cliente = cli_dao.findClienteEntities();    
//         mostraPesquisa(Cliente);
    }//GEN-LAST:event_jB_excluirActionPerformed

    private void jB_novoActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jB_novoActionPerformed
        jTabela_Cliente.clearSelection();
        decisao = 0;
        InsereTexto();
        AbilitarDados();
    }//GEN-LAST:event_jB_novoActionPerformed

    private void jTF_pesquisarKeyReleased(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_jTF_pesquisarKeyReleased
        listCliente = loc.buscarClienteList(jTF_pesquisar.getText() + "%");
        mostraPesquisa(listCliente);
    }//GEN-LAST:event_jTF_pesquisarKeyReleased

    private void jB_voltarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jB_voltarActionPerformed
        dispose();
    }//GEN-LAST:event_jB_voltarActionPerformed

    private void jTF_nomeMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jTF_nomeMouseClicked
        jTF_nome.setText("");
        jTF_nome.setEditable(true);
        jTF_nome.setEnabled(true);
        jTF_nome.requestFocus();
    }//GEN-LAST:event_jTF_nomeMouseClicked

    private void jTF_cpfMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jTF_cpfMouseClicked
        if ("Digite o cpf do cliente".equals(jTF_cpf.getText())) {
            jTF_cpf.setText("");
            jTF_cpf.setEditable(true);
            jTF_cpf.setEnabled(true);
            jTF_cpf.requestFocus();
        }
    }//GEN-LAST:event_jTF_cpfMouseClicked

    private void jTF_enderecoMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jTF_enderecoMouseClicked
        jTF_endereco.setText("");
        jTF_endereco.setEditable(true);
        jTF_endereco.setEnabled(true);
        jTF_endereco.requestFocus();
    }//GEN-LAST:event_jTF_enderecoMouseClicked

    private void jTF_pesquisarMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jTF_pesquisarMouseClicked
        jTabela_Cliente.clearSelection();        // TODO add your handling code here:
    }//GEN-LAST:event_jTF_pesquisarMouseClicked

    /**
     * @param args the command line arguments
     */
    public static void main(String args[]) {

        java.awt.EventQueue.invokeLater(new Runnable() {

            @Override
            public void run() {
                new FormCliente().setVisible(true);
            }
        });
    }
    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton jB_excluir;
    private javax.swing.JButton jB_novo;
    private javax.swing.JButton jB_salvar;
    private javax.swing.JButton jB_voltar;
    private javax.swing.JLabel jLabel16;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JLabel jLabel3;
    private javax.swing.JLabel jLabel5;
    private javax.swing.JLabel jLabel9;
    private javax.swing.JScrollPane jScrollPane2;
    private javax.swing.JTextField jTF_cpf;
    private javax.swing.JTextField jTF_endereco;
    private javax.swing.JTextField jTF_nome;
    private javax.swing.JTextField jTF_pesquisar;
    private javax.swing.JTable jTabela_Cliente;
    // End of variables declaration//GEN-END:variables

    private void limpaDados() {
        jTF_nome.setText("");
        jTF_cpf.setText("");
        jTF_endereco.setText("");
    }

    private void AbilitarDados() {
        jTF_cpf.setEnabled(true);
        jTF_endereco.setEnabled(true);
        jTF_nome.setEnabled(true);
        jTF_cpf.setEditable(true);
        jTF_endereco.setEditable(true);
        jTF_nome.setEditable(true);
    }

    private void DesabilitarDados() {
        jTF_cpf.setEditable(false);
        jTF_endereco.setEditable(false);
        jTF_nome.setEditable(false);
        jTF_cpf.setEnabled(false);
        jTF_endereco.setEnabled(false);
        jTF_nome.setEnabled(false);
    }

    private void InsereTexto() {
        jTF_nome.setText("Digite o nome do cliente");
        jTF_nome.setEnabled(false);
        jTF_cpf.setText("Digite o cpf do cliente");
        jTF_cpf.setEnabled(false);

        jTF_endereco.setText("Digite o endereço do cliente");
        jTF_endereco.setEnabled(false);
    }

    private boolean VerificaDados() {
        if (("Digite o cpf do cliente".equals(jTF_cpf.getText()) && "Digite o endereço do cliente".equals(jTF_endereco.getText()) && "Digite o nome do cliente".equals(jTF_nome.getText())) || ("".equals(jTF_cpf.getText()) && "".equals(jTF_endereco.getText()) && "".equals(jTF_nome.getText()))) {
            return false;
        } else {
            return true;
        }
    }

    private void mostraPesquisa(List<Cliente> listCliente) {
        while (tmCliente.getRowCount() > 0) {
            tmCliente.removeRow(0);
        }
        if (!listCliente.isEmpty()) {
            String[] linha = new String[]{null, null, null};
            for (int i = 0; i < listCliente.size(); i++) {
                tmCliente.addRow(linha);
                tmCliente.setValueAt(listCliente.get(i).getNome(), i, 0);
                tmCliente.setValueAt(listCliente.get(i).getCpf(), i, 1);
                tmCliente.setValueAt(listCliente.get(i).getEndereco(), i, 2);


            }
        }
    }

    private void JTTabelaLinhaSelecionada(JTable tabela) {
        if (jTabela_Cliente.getSelectedRow() > -1) {
            AbilitarDados();
            decisao = 1;
            jTF_nome.setText(String.valueOf(listCliente.get(tabela.getSelectedRow()).getNome()));
            jTF_cpf.setText(String.valueOf((listCliente.get(tabela.getSelectedRow()).getCpf())));
            jTF_endereco.setText((listCliente.get(tabela.getSelectedRow()).getEndereco()));
            jTF_cpf.setEditable(false);

        } else {
            InsereTexto();

        }
    }
}
